package mx.its.dswII.biblioteca.bl;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dswII.biblioteca.dao.CategoriaDeLibroDaoLocal;
import mx.its.dswII.biblioteca.dao.LibroDaoLocal;
import mx.its.dswII.biblioteca.enumeracion.EstadoTransaccion;
import mx.its.dswII.biblioteca.modelo.Categoria;
import mx.its.dswII.biblioteca.modelo.CategoriaDeLibro;
import mx.its.dswII.biblioteca.modelo.Libro;

/**
 *
 * @libro Lenovo-user
 */
@Stateless
public class LibroBL implements LibroBLLocal {

    @EJB
    private CategoriaDeLibroDaoLocal categoriaDeLibroDao;
    @EJB
    private LibroDaoLocal libroDao;

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @Override
    public EstadoTransaccion register(Libro libro, List<Categoria> categories) {
        if (libroDao.findDuplicity(libro)) {
            //no se pudo hacer
            System.out.println("no se puede hacer ");
            return EstadoTransaccion.INCOMPLETO;
        } else {
            for (Categoria c : categories) {
                CategoriaDeLibro cdl = new CategoriaDeLibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(libro);
                categoriaDeLibroDao.create(cdl);
            }
            libroDao.create(libro);
            // ya lo hizo
            return EstadoTransaccion.COMPLETO;

        }

    }

////////    @Override
////////    public EstadoTransaccion modify(Libro libro) {
////////        if (libroDao.findDuplicity(libro) || libro.getIsbn() == null) {
////////            return EstadoTransaccion.INCOMPLETO;
////////        } else {
////////            libroDao.edit(libro);
////////            return EstadoTransaccion.COMPLETO;
////////        }
////////    }

     @Override
    public EstadoTransaccion remove(Libro libro) {
//        if (libroDao.findDuplicity(libro) || libro.getIsbn() == null) {

//            return EstadoTransaccion.INCOMPLETO;
//        } else {
            libroDao.remove(libro);
            return EstadoTransaccion.COMPLETO;
//        }
    }

    public List<Libro> getAll() {
        return libroDao.findAll();
    }

    @Override
    public EstadoTransaccion modify(Libro libro, List<Categoria> lista) {
             if(libro.getId()==null || libroDao.find(libro.getId())==null){
        return EstadoTransaccion.INCOMPLETO;
        }else{
           
            libroDao.edit(libro);
            List<CategoriaDeLibro> temp=categoriaDeLibroDao.getListByBook(libro);
            for(CategoriaDeLibro c:temp){
                 System.out.println("id libro "+c.getIdLibro()+" Lista2: "+temp);
                categoriaDeLibroDao.remove(c);
            }
            
            for(Categoria c:lista){
                CategoriaDeLibro cdl=new CategoriaDeLibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(libro);
                categoriaDeLibroDao.create(cdl);
            }
             
            return EstadoTransaccion.COMPLETO;
        }
    }
//      public Libro findByClaveForLend(String clave) {
//        Libro lbusqueda = new Libro();
//        lbusqueda.setClave(clave);
//        Libro l = libroDao.findByClave(lbusqueda);
//        System.out.println("l======"+l);
//        System.out.println(""+l != null && l.getEstado() == EstadoDetallePrestamo.RETURN.ordinal());
//        if (l != null && l.getEstado() == EstadoDetallePrestamo.RETURN.ordinal()) {
//            return l;
//        }
//        return null;
//        
//    }

    @Override
    public Libro findBookForLend(String parameter) {
        return libroDao.findBookForLend(parameter);
        
    }
}
